package be.ipl.finito.servlets;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.EJB;
import javax.servlet.RequestDispatcher;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import be.ipl.finito.domaine.Jeton;
import be.ipl.finito.domaine.Joueur;
import be.ipl.finito.domaine.Participation;
import be.ipl.finito.domaine.Partie;
import be.ipl.finito.exceptions.BizException;
import be.ipl.finito.usecases.GestionParticipations;
import be.ipl.finito.usecases.GestionParties;

@SuppressWarnings("serial")
@WebServlet(name = "victoire.html")
public class Victoire extends HttpServlet implements Servlet {

	@EJB
	private GestionParties gp;
	@EJB
	private GestionParticipations gpar;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		HttpSession session = req.getSession();
		int id_partie = (Integer)(session.getAttribute("id"));
		Partie partie = gp.getPartieById(id_partie);
		if(partie==null){
			System.out.println("Servlet Victoire : Partie null");
		}
		Joueur joueur = (Joueur) session.getAttribute("joueur");
		System.out.println("Login du joueur courant :" + joueur.getLogin());
		try {
			List<Joueur> listeJoueurs = gp.getJoueurs(partie);
			listeJoueurs.remove(joueur);
			Participation myParticipation = gp.getParticipation(partie, joueur);
			Map<Joueur, Participation> mapParticipations = new HashMap<Joueur, Participation>();
			Map<Joueur, List<Jeton>> mapJetons = new HashMap<Joueur, List<Jeton>>();
			for (Joueur j : listeJoueurs) {
				Participation participation = gp.getParticipation(partie,
						j);
				mapJetons.put(j, gpar.renvoieListeCases(participation));
				mapParticipations.put(j, participation);
			}			
			req.setAttribute("myParticipation", myParticipation);
			req.setAttribute("myListeJetons",gpar.renvoieListeCases(myParticipation));
			req.setAttribute("listeJoueurs", listeJoueurs);
			req.setAttribute("nbColonnes",(int)12/listeJoueurs.size());
			req.setAttribute("mapParticipation", mapParticipations);
			req.setAttribute("mapJetons", mapJetons);
		} catch (BizException e) {
			req.setAttribute("messageErreur", e.getMessage());
		}
		RequestDispatcher rd = getServletContext().getNamedDispatcher(
				"Victoire");
		rd.forward(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doGet(req,resp);
	}
}